/**
 * Universidade Federal de Campina Grande - UFCG
 * Departamento de Sistemas e Computação - DSC
 * Disciplina: Compiladores
 * Professor: Marcus Salerno
 * 
 * Projeto da Disciplina - Analisador Lexico
 * 
 *  
 * Contributors:
 * Arthur
 * Carolina
 * Saulo
 * 
 */
package lexico;

import util.Constantes;
import erro.ErroLexico;
import erro.ErroTipoInvalido;

public class Identificador extends ASimbolo {
	
	private String tipo = "";	

	/**
	 * Construtor
	 * @param symbol
	 */
	public Identificador(int codigo, String simbolo, int linha) {
		super(codigo, simbolo, linha);		
	}
	
	/**
	 * Construtor
	 * @param symbol
	 */
	public Identificador(String symbol, int linha) {
		super(Constantes.CODIGO_IDENTIFICADOR, symbol, linha);		
	}
		
	
	@Override
	public boolean verificaRegras() throws ErroLexico {
		if (getSimbolo().length() > Constantes.TAMANHO_LIMITE) {
			setSimbolo(getSimbolo().substring(0, Constantes.TAMANHO_LIMITE-1)); 
			throw new ErroLexico(Constantes.EXCEDIDO_MAXIMO_ERRO + Constantes.TAMANHO_LIMITE, -1);
		}
		return true;
	}
	
	
	@Override
	public String getTipo() {
		return this.tipo;
	}

	@Override
	public void setTipo(String type) throws ErroTipoInvalido {
		if (type.equalsIgnoreCase("palavra") 
				|| type.equalsIgnoreCase("inteiro") 
				|| type.equalsIgnoreCase("vetor") ){
			this.tipo = type;	
		} else {
			throw new ErroTipoInvalido("Tentativa de atribuicao um tipo invalido a um simbolo: " + tipo,
					getLinha());
		}
	}


}
